package done.normal_001_100;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import static com.study.util.LogUtil.info;

/**
 * 6 之字型转换字符串
 * <p>
 * Example 1:
 * Input: s = "PAYPALISHIRING", numRows = 3
 * Output: "PAHNAPLSIIGYIR"
 * <p>
 * P   A   H   N
 * A P L S I I G  j + size - 2 * i;
 * Y   I   R
 * <p>
 * <p>
 * j 指针的步长是 step = 2 * rownum - 2
 * <p>
 * i 从左向右              通项公式
 * |
 * <p>
 * j --  [0]   [4]   [8]   [12]    <-   0 + step - 2 * 0
 * 从     P     A     H     N
 * 上    [1]   [5]   [9]   [13]    <-   j + step - 2 * i
 * 向     A  P  L  S  I  I  G
 * 下    [2]   [6]  [10]
 * Y     I     R
 * <p>
 * Example 2:
 * Input: s = "PAYPALISHIRING", numRows = 4
 * Output: "PINALSIGYAHRPI"
 * Explanation:
 * <p>
 * P     I    N
 * A   L S  I G  j + size - 2 * i;
 * Y A   H R
 * P     I
 *
 * @author 大硕
 * 2019-03-19 11:28 PM
 **/
@Slf4j
public class ZigZagConversion {

    @SuppressWarnings("all")
    public String convert(String s, int numRows) {
        // 190403 first
        // 190404 second
        // 190417 third 想不起来，看答案做了两遍
        return null;
    }

    @Test
    public void test() {
        info("PINALSIGYAHRPI -> {}", convert("PAYPALISHIRING", 4));
    }
}





























/*
public String convert(String s, int numRows) {
    if (numRows <= 1) return s;
    String res = "";
    int size = 2 * numRows - 2;

    // 两个指针i, j
    // 从前到后 i 一个字节 一个字节的找
    for (int i = 0; i < numRows; i++) {

        // 从 i 开始每次步长为 size 向后遍历
        // 因为是个 v 字型，同一行上需要拼上另一部分字符串
        for (int j = i; j < s.length(); j += size) {

            res += s.charAt(j);
            int tmp = j + size - 2 * i;

            // i == 0 的时候不需要拼字符串
            // i == numRows - 1 的时候不需要拼字符串
            // 不能超过总的字符串范围
            if (i != 0 && i != numRows - 1 && tmp < s.length()) {
                res += s.charAt(tmp);
            }

        }
    }
    return res;
}
*/